import {defineStore} from "pinia"
import {ref} from "vue"
import {UserInfoType} from "../types/user-info-type.ts"

/**
 * 用户相关信息状态管理仓库
 */
export const useUserStore = defineStore(
  'userStore',
  () => {
    // 登录凭证（登录用户的 ID）
    const loginCredential = ref<number | null>(null)
    /**
     * 保存登录凭证（登录用户的 ID）
     *
     * @param credential 登录凭证（登录用户的 ID）
     */
    const saveLoginCredential = (credential: number) => {
      loginCredential.value = credential
    }
    /**
     * 获取登录凭证（登录用户的 ID）
     *
     * @returns {number | null} 登录凭证（登录用户的 ID）
     */
    const getLoginCredential = (): number | null => {
      return loginCredential.value
    }

    // 登录用户的信息
    const userInfo = ref<UserInfoType | null>(null)
    /**
     * 保存登录用户的信息，同时保存登录凭证（登录用户的 ID）
     *
     * @param {UserInfo} info 登录用户的信息
     */
    const saveUserInfo = (info: UserInfoType) => {
      userInfo.value = info
      // 保存登录凭证（登录用户的 ID）
      saveLoginCredential(info.id)
    }
    /**
     * 获取登录用户的信息
     *
     * @returns {UserInfo | null} 登录用户的信息
     */
    const getUserInfo = (): UserInfoType | null => {
      return userInfo.value
    }

    return {
      loginCredential,
      saveLoginCredential,
      getLoginCredential,
      userInfo,
      saveUserInfo,
      getUserInfo,
    }
  },
  {
    // 持久化存储配置
    persist: {
      // 持久化存储的位置
      storage: localStorage,
    }
  }
)
